// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
// 获取 `notice` 集合的引用
const noticeCollection = db.collection('notice');

module.exports = {
	_before: function() { // 通用预处理器
		// 这里可以放置通用的前置逻辑，例如权限校验等
	},

	/**
	 * 获取所有公告列表（仅包含摘要信息）
	 * @returns {object} 返回公告列表的处理结果
	 */
	async listNotices() {
		try {
			// 优化：使用 field() 方法指定返回字段，避免加载过大的 data 字段，提升性能。
			const res = await noticeCollection
				.orderBy('create_time', 'desc') // 优化：统一使用 create_time 字段进行排序
				.field({
					title: true,
					active: true,
					data:true,
					create_time: true,
					update_time: true
				})
				.get();

			return {
				code: 0,
				data: res.data,
				message: '查询成功'
			};
		} catch (e) {
			// 健壮性：增加错误捕获和处理
			console.error(e);
			return {
				code: 500,
				message: '查询公告列表失败'
			};
		}
	},

	/**
	 * 获取已激活的公告列表（仅包含摘要信息）
	 * @returns {object} 返回已激活公告列表的处理结果
	 */
	async ActivelistNotices() { // 优化：方法名遵循 camelCase 规范
		try {
			const res = await noticeCollection
				.where({
					active: true
				})
				.orderBy('create_time', 'desc') // 优化：统一使用 create_time 字段进行排序
				.field({ // 优化：原代码只查询了 data，通常列表页需要标题等信息
					// title: true,
					data: true, // 假设活动公告列表需要显示内容，如果不需要也可以去掉
					// create_time: true
				})
				.get();

			return {
				code: 0,
				data: res.data,
				message: '查询成功'
			};
		} catch (e) {
			// 健壮性：增加错误捕获和处理
			console.error(e);
			return {
				code: 500,
				message: '查询已激活的公告列表失败'
			};
		}
	},

	/**
	 * 保存公告（智能处理新增或更新）
	 * @param {object} notice 公告数据，包含 title, data, active, 和可选的 _id
	 * @returns {object} 返回保存操作的处理结果
	 */
	async saveNotice(notice) {
		// 安全性：使用解构赋值，只获取需要的字段，防止客户端注入无关或恶意字段
		const {
			_id,
			title,
			data,
			active
		} = notice;

		// 参数校验
		if (!title || !data) {
			return {
				code: 400,
				message: '标题和内容不能为空'
			}
		}

		try {
			const currentTime = Date.now();

			if (_id) {
				// 更新操作
				const noticeToUpdate = {
					title,
					data,
					active,
					update_time: currentTime
				};
				await noticeCollection.doc(_id).update(noticeToUpdate);
				return {
					code: 0,
					message: '更新成功'
				};
			} else {
				// 新增操作
				const noticeToAdd = {
					title,
					data,
					active,
					create_time: currentTime,
					update_time: currentTime
				};
				await noticeCollection.add(noticeToAdd);
				return {
					code: 0,
					message: '新增成功'
				};
			}
		} catch (e) {
			// 健壮性：增加错误捕获和处理
			console.error(e);
			return {
				code: 500,
				message: '保存公告失败'
			};
		}
	},

	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
}